package 算法;

import java.util.Arrays;

import org.junit.Test;

public class 删除数组中的元素 {
	


	public static void main(String[] args) {
		
		
	}
	
	@Test
	public void 删除指定_角标_元素(){
		
		/*
		 * 1.int[] arrayA = {21,26,59,78,46,91,34};   //删除角标4
		 * 					 0	 1  2  3  4	 5	6
		 * 
		 * 2.int[] arrayA = {21,26,59,78,91,34,0};
		 * 				      0  1  2  3  4  5 6
		 * 
		 * 思路：
		 * arrayA[4] = arrayA[5]
		 * arrayA[5] = arrayA[6]
		 * arrayA[6] = 0
		 */
		
		int[] arrayA = {21,26,59,78,46,91,34};
		
		//修改前
		System.out.print("数组修改前：");
		System.out.println(Arrays.toString(arrayA));
		
		//修改后
//		arrayA[4] = arrayA[5];
//		arrayA[5] = arrayA[6];
//		arrayA[6] = 0;
		
		int index = 4;
			 // 删除角标4      //每一个数往前挪一个，最后一个数变0，所以遍历到倒数第二个数就可以了
		for (int i = index; i < arrayA.length-1; i++) {
			arrayA[i] = arrayA[i+1];
		}
		arrayA[arrayA.length-1] = 0; // 最后一个元素，归0
		
		System.out.print("数组修改后：");
		System.out.println(Arrays.toString(arrayA));
	}
	
	@Test
	public void 删除指定_元素里的那个数_元素(){
		
		int[] arrayA = {21,26,59,78,46,91,34};  //删除78
		
		//修改前
		System.out.print("数组修改前：");
		System.out.println(Arrays.toString(arrayA));
		
		//修改后
		int index = -1;  //从-1开始，如果数组里没有，index始终是-1，不会进入下面删除元素的代码的循环
		for (int i = 0; i < arrayA.length; i++) {
			if (arrayA[i]==1111) {
				index = i;
				break; //只要找到第一个48就停止循环，，提高性能  ，如果还有重复的48又会把下个48的值付给index
			}
			
		}
		
		if (index >= 0 && index <= arrayA.length-1) { // index范围 在 数组角标里面 说明有一个数子要被删除，所以才执行下面删除代码
			for (int i = index; i < arrayA.length-1; i++) {
				arrayA[i] = arrayA[i+1];
			}
			arrayA[arrayA.length-1]=0;
		}
		
		
		System.out.print("数组修改后：");
		System.out.println(Arrays.toString(arrayA));
	}
}
